package com.hzw.saas.web.shell.service;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import com.hzw.saas.api.storage.bo.InxChunkBO;
import com.hzw.saas.web.shell.service.bo.SftpFileBO;
import com.hzw.saas.web.shell.service.bo.SshConnBO;

/**
 * @author zzl
 * @since 06/04/2021
 */
public interface ISftpFileService {

    /**
     * 获取用户目录路径
     *
     * @param sshConn
     * @return
     */
    String getHome(SshConnBO sshConn);

    /**
     * 断开session
     *
     * @param sshConn
     */
    void close(SshConnBO sshConn);

    /**
     * 获取指定路径的文件/目录信息
     *
     * @param sshConn
     * @param path
     * @return
     */
    SftpFileBO getFileInfo(SshConnBO sshConn, String path);

    /**
     * 传输分片数据
     *
     * @param sshConn
     * @param tarDirPath 目标目录
     * @param chunkInfo
     * @param chunkFile
     */
    void transferChunkOnSftp(SshConnBO sshConn, String tarDirPath, InxChunkBO chunkInfo, File chunkFile);

    /**
     * 传输分片数据
     *
     * @param sshConn
     * @param tarDirPath 目标目录
     * @param chunkInfo
     * @param ins
     */
    void transferChunkOnSftp(SshConnBO sshConn, String tarDirPath, InxChunkBO chunkInfo, InputStream ins);

    /**
     * 检查文件/目录是否存在
     *
     * @param path 目标路径
     * @return
     */
    boolean exist(SshConnBO sshConn, String path);

    /**
     * 获取目录子目录和子文件
     *
     * @param sshConn
     * @param supPath 目标目录
     * @return
     */
    List<SftpFileBO> list(SshConnBO sshConn, String supPath);

    /**
     * 创建目录
     *
     * @param path 待创建目录，支持多级创建
     */
    void mkdir(SshConnBO sshConn, String path);

    /**
     * 重命名
     *
     * @param sshConn
     * @param srcPath
     * @param newName
     */
    void rename(SshConnBO sshConn, String srcPath, String newName);

    /**
     * 移动
     *
     * @param sshConn
     * @param oldPath 原文件/目录路径
     * @param newPath 新文件/目录路径
     */
    void mv(SshConnBO sshConn, String oldPath, String newPath);

    /**
     * 批量移动
     *
     * @param oldPaths
     * @param newDirPath 目标目录
     */
    void mv(SshConnBO sshConn, List<String> oldPaths, String newDirPath);

    /**
     * 复制
     *
     * @param sshConn
     * @param oldPath 原文件/目录路径
     * @param newPath 新文件/目录路径
     */
    void cp(SshConnBO sshConn, String oldPath, String newPath);

    /**
     * 批量复制
     *
     * @param oldPaths
     * @param newDirPath 目标目录
     */
    void cp(SshConnBO sshConn, List<String> oldPaths, String newDirPath);

    /**
     * 删除
     *
     * @param sshConn
     * @param path
     */
    void rm(SshConnBO sshConn, String path);

    /**
     * 下载
     * 只支持文件下载
     *
     * @param sshConn
     * @param srcPath
     * @param ous
     */
    void download(SshConnBO sshConn, String srcPath, OutputStream ous);

}
